package module

const (
	CREATE_VSYS_PATH   = "/api/v1/vsys"      //创建虚拟系统 POST
	DELETE_VSYS_PATH   = "/api/v1/vsys"      //删除虚拟系统 DELETE
	PUT_VSYS_PATH      = "/api/v1/vsys"      //编辑虚拟系统 PUT
	GET_VSYS_PATH      = "/api/v1/vsys/list" //获取虚拟系统列表 GET
	GET_MORE_VSYS_PATH = "/api/v1/vsys/get"  //查询详细虚拟系统 GET
)

// 创建虚拟系统请求体
type CreateVsysRequest struct {
	// TODO: 手动校验 Name 必填、Interfaces 不能为空
	Name        string   `json:"name"`
	Description string   `json:"description"`
	Interfaces  []string `json:"interfaces"` // 切片是否为空由 handler 手动校验
}

// 创建虚拟系统响应体
type CreateVsysResponse struct {
	Code    int    `json:"code"`
	Message string `json:"message"`
}

// 删除虚拟系统请求体
type DeleteVsysRequest struct {
	// TODO: 手动校验 Id 数组不能为空
	Id []int `json:"id"`
}

// 删除虚拟系统响应体
type DeleteVsysResponse struct {
	Code    int    `json:"code"`
	Message string `json:"message"`
}

// 编辑虚拟系统请求体
type UpdateVsysRequest struct {
	// TODO: 手动校验 Interfaces 不能为空（或根据业务允许为空则忽略）
	Description string   `json:"description"`
	Interfaces  []string `json:"interfaces"`
}

// 编辑虚拟系统响应体
type UpdateVsysResponse struct {
	Code    int    `json:"code"`
	Message string `json:"message"`
}

// 查询虚拟系统列表请求体
type ListVsysRequest struct {
	// TODO: 手动校验 PageSize、PageNum > 0
	PageSize int    `form:"pageSize"`
	PageNum  int    `form:"pageNum"`
	Name     string `form:"name"`
}

// 虚拟系统列表单项
type VsysListItem struct {
	Id          int      `json:"id"`
	Name        string   `json:"name"`
	Description string   `json:"description"`
	Interfaces  []string `json:"interfaces"`
	CreatedAt   string   `json:"createdAt"`
	UpdatedAt   string   `json:"updatedAt"`
}

// 虚拟系统列表响应体
type ListVsysResponse struct {
	Code    int    `json:"code"`
	Message string `json:"message"`
	Data    struct {
		List        []VsysListItem `json:"list"`
		CurrentPage int            `json:"currentPage"`
		Total       int            `json:"total"`
	} `json:"data"`
}

// 查询虚拟系统详情响应体
type GetVsysResponse struct {
	Code    int          `json:"code"`
	Message string       `json:"message"`
	Data    VsysListItem `json:"data"`
}
